home *** CD-ROM | disk | FTP | other *** search
- #include "myIncludes.h"
- #include "myProtos.h"
-
- #define kResumeMask 1 /* bit of message field for resume vs. suspend */
- #define kNoFind 130
- #define kSearchDlog 200
-
-
- LaunchParamBlockRec launchThis;
-
- Boolean gQuit, gInBackground;
- EventRecord gEvRecord;
- AEDesc gTheAddress;
- music gTrebMusic[1024];
- music gBassMusic[1024];
- long gNumMembers;
- DialogPtr gDlog;
-
- void main(void);
- void InitAEStuff(void);
- OSErr FindReceiver(AEDesc *theAddress); /* sender only */
- void zero_mem(register char*, register short);
-
- void do_event(EventRecord *gEvRec);
-
- void main(void)
- {
- OSErr err;
-
- MaxApplZone();
- InitGraf((Ptr)&qd.thePort);
- InitFonts();
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(nil);
- InitCursor();
- gQuit = FALSE;
-
- InitAEStuff();
- gDlog = NULL;
- #define CONDUCTOR /* */
- #ifdef CONDUCTOR
- gDlog = GetNewDialog(128, NULL, (DialogPtr)-1);
- if (gDlog == NULL)
- {
- SysBeep(0);
- ExitToShell();
- }
- #endif CONDUCTOR
-
- do {
- WaitNextEvent(everyEvent, &gEvRecord, 30, nil);
- do_event(&gEvRecord);
- }
- while (gQuit != TRUE);
-
- if (gDlog)
- DisposeDialog(gDlog);
- ExitToShell();
- }
-
-
- void do_mouse(EventRecord *evp);
- void do_mouse(EventRecord *evp)
- {
- DialogPtr dlogP;
- short item;
-
-
- if (DialogSelect(evp, &dlogP, &item))
- {
- SetPort(dlogP);
- switch (item)
- {
- case 1: if (get_music())
- gNumMembers = 0;
- break;
- case 2: break;
- case 3: if ((get_members(&gNumMembers) == noErr) && gNumMembers)
- send_music();
- break;
- case 5: if ((get_self(&gNumMembers) == noErr) && gNumMembers)
- send_music();
- break;
- case 4: gQuit = TRUE; break;
- default: SysBeep(0);
- }
- }
- }
-
-
- void do_event(EventRecord *gEvRec)
- {
- WindowPtr awindow;
- Point pt;
- OSErr err;
- short item;
-
- switch (gEvRec->what)
- {
- case nullEvent: break;
- case activateEvt: break;
- case autoKey: break;
- case keyUp: break;
- case networkEvt: break; /* don't care */
- case driverEvt: break;
- case mouseUp: break;
-
- case keyDown: gQuit = TRUE; break;
-
- case updateEvt:
- if (IsDialogEvent(gEvRec))
- DialogSelect(gEvRec, &awindow, &item);
- break;
-
- case mouseDown: /* first see where the hit was */
- if (IsDialogEvent(gEvRec))
- do_mouse(gEvRec);
- else
- switch (FindWindow(gEvRec->where, &awindow))
- {
- case inDesk: break;
- case inSysWindow:
- SystemClick(&gEvRecord, awindow); break;
-
- case inMenuBar: break;
- case inContent: break;
- case inDrag: break;
- case inGrow: break;
- case inGoAway: break;
- }
- break;
-
- case app4Evt:
- switch ((gEvRec->message >> 24) & 0x0FF) /* high byte of message */
- {
- case suspendResumeMessage: /* suspend/resume is also an activate/deactivate */
- gInBackground = (gEvRec->message & kResumeMask) == 0;
- break;
- }
- break;
-
- case diskEvt: /* checks for an error on the mount */
- pt.h = pt.v = 40;
- if ( HiWord(gEvRec->message) != noErr )
- DIBadMount(pt, gEvRec->message);
- break;
-
- case kHighLevelEvent:
- err = AEProcessAppleEvent(&gEvRecord);
- break;
-
- default: break;
- }
- }
-
-
- /* I'm just launching it, not searching for a port */
- /* I use PBCatSearch to search for it's creator and file type. */
- OSErr FindReceiver(AEDesc *theAddress)
- {
- OSErr myError;
- DialogPtr search = GetNewDialog(kSearchDlog, nil, (WindowPtr)-1);
- CSParamPtr csBlockPtr = (CSParamPtr)NewPtrClear(sizeof(CSParam));
- long dirIDUnused;
- Str32 nulString = "\p";
-
- DrawDialog(search);
- if (csBlockPtr) /* initialize the parameter block */
- {
- csBlockPtr->ioSearchInfo1 = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec));
- csBlockPtr->ioSearchInfo2 = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec));
- if (csBlockPtr->ioSearchInfo1 && csBlockPtr->ioSearchInfo2)
- {
- csBlockPtr->ioMatchPtr = (FSSpecPtr)NewPtrClear(sizeof(FSSpec) * 1); /* only looking for 1 */
- if (csBlockPtr->ioMatchPtr)
- { /* Now see if we can create an optimization buffer */
- csBlockPtr->ioOptBuffer = NewPtr(2048);
- if (csBlockPtr->ioOptBuffer)
- csBlockPtr->ioOptBufSize = 2048;
- else
- csBlockPtr->ioOptBufSize = 0; /* no buffer, sorry */
- csBlockPtr->ioReqMatchCount = 1;
- csBlockPtr->ioSearchTime = 0; /* no timeout */
- }
- }
- }
-
- HGetVol(NULL, &csBlockPtr->ioVRefNum, &dirIDUnused); /* get default volume for search */
- csBlockPtr->ioSearchInfo1->hFileInfo.ioNamePtr = nil;
- csBlockPtr->ioSearchInfo2->hFileInfo.ioNamePtr = nil;
- csBlockPtr->ioSearchInfo1->hFileInfo.ioFlFndrInfo.fdCreator = 'WILD'; /* YOoooooooo! Over HERE!!! */
- csBlockPtr->ioSearchInfo1->hFileInfo.ioFlFndrInfo.fdType = 'APPL';
- csBlockPtr->ioSearchBits = fsSBFlFndrInfo;
- csBlockPtr->ioSearchInfo2->hFileInfo.ioFlFndrInfo.fdCreator = 0xFFFFFFFF;
- csBlockPtr->ioSearchInfo2->hFileInfo.ioFlFndrInfo.fdType = 0xFFFFFFFF;
-
- myError = PBCatSearch(csBlockPtr, false); /* search sync */
- if (myError == noErr && csBlockPtr->ioActMatchCount != 0)
- { /* we found it, so launch it */
- launchThis.launchBlockID = extendedBlock;
- launchThis.launchEPBLength = extendedBlockLen;
- launchThis.launchFileFlags = (unsigned short)nil;
- launchThis.launchControlFlags = launchContinue + launchNoFileFlags + launchDontSwitch;
- launchThis.launchAppSpec = &csBlockPtr->ioMatchPtr[0];
-
- myError = LaunchApplication(&launchThis);
- if (myError == noErr) /* it launched fine. we can use the PSN to make a target */
- AECreateDesc(typeProcessSerialNumber, (Ptr)&launchThis.launchProcessSN,
- sizeof(ProcessSerialNumber), theAddress);
- }
-
- /* no matter what happened, kill the memory allocated */
- if (csBlockPtr)
- {
- if (csBlockPtr->ioSearchInfo1)
- DisposPtr((Ptr)csBlockPtr->ioSearchInfo1);
- if (csBlockPtr->ioSearchInfo2)
- DisposPtr((Ptr)csBlockPtr->ioSearchInfo2);
- if (csBlockPtr->ioMatchPtr)
- DisposPtr((Ptr)csBlockPtr->ioMatchPtr);
- if (csBlockPtr->ioOptBuffer)
- DisposPtr((Ptr)csBlockPtr->ioOptBuffer);
- DisposPtr((Ptr)csBlockPtr);
- }
-
- /* catsearch section end */
- DisposDialog(search);
- return(myError);
- }
-
-